Skip to content

Fix: Base type not generated for types using oneOf with discriminator#906

Merged
christianhelle merged 4 commits into
mainfrom
copilot/fix-oneof-schema-generation
Mar 4, 2026
Merged

Fix: Base type not generated for types using oneOf with discriminator#906
christianhelle merged 4 commits into
mainfrom
copilot/fix-oneof-schema-generation

Conversation

Copilot AI commented Feb 20, 2026

Copy link
Copy Markdown
Contributor

Description:

NSwag's C# code generator doesn't handle the OpenAPI 3.0 oneOf/anyOf + discriminator polymorphism pattern. It produces an undefined anonymous type (e.g., IdentityProvider2) as the property type instead of the named base class, skips some subtype classes entirely, and generates no inheritance hierarchy. This is visible with specs like FusionAuth's OpenAPI spec which uses oneOf + discriminator for IdentityProvider.

Changes

  • CSharpClientGeneratorFactory.cs: Added ConvertOneOfWithDiscriminatorToAllOf(), called before NSwag code generation. For any component schema with oneOf/anyOf + discriminator, it converts to the allOf inheritance pattern NSwag understands:

    • Sets type: object on the base schema if absent
    • Adds allOf: [$ref: baseSchema] to each subtype not already inheriting
    • Clears oneOf/anyOf from the base schema
  • OneOfDiscriminatorTests.cs: Tests covering base class generation, absence of anonymous types, full subtype generation, inheritance hierarchy, correct property types, and compilation for both oneOf and anyOf with discriminator, in both NJsonSchema and System.Text.Json polymorphic serialization modes.

Example OpenAPI Specification (previously broken):

components:
  schemas:
    IdentityProvider:
      oneOf:
        - $ref: '#/components/schemas/AppleIdentityProvider'
        - $ref: '#/components/schemas/FacebookIdentityProvider'
      discriminator:
        propertyName: type
    AppleIdentityProvider:
      type: object
      properties:
        type:
          type: string
        bundleId:
          type: string
    FacebookIdentityProvider:
      type: object
      properties:
        type:
          type: string
        appId:
          type: string

Example generated output (after fix):

[JsonInheritanceConverter(typeof(IdentityProvider), "type")]
[JsonInheritanceAttribute("Apple", typeof(AppleIdentityProvider))]
[JsonInheritanceAttribute("Facebook", typeof(FacebookIdentityProvider))]
public partial class IdentityProvider { }

public partial class AppleIdentityProvider : IdentityProvider
{
    public string Type { get; set; }
    public string BundleId { get; set; }
}

public partial class FacebookIdentityProvider : IdentityProvider
{
    public string Type { get; set; }
    public string AppId { get; set; }
}
Original prompt

This section details on the original issue you should resolve

<issue_title>Base type not generated for types specified by oneOf in the schema</issue_title>
<issue_description>Describe the bug
I try to generate a client for the FusionAuth spec and it is using oneOf for IdentityProviderField and in the resulting source file no IdentityProvider base class is generated.

Support Key: [my-support-key]
N/A (did not find it in output)

OpenAPI Specifications
https://raw.githubusercontent.com/FusionAuth/fusionauth-openapi/main/openapi.yaml

Additional context
My quick fix were these:

  1. Create an IdentityProvider class:
public class IdentityProvider
{
}
  1. Change the method response to have a generic parameter:
    public partial class IdentityProviderResponse<T> where T: IdentityProvider
    {

        [JsonPropertyName("identityProvider")]

        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]   
        public T IdentityProvider { get; set; }

        [JsonPropertyName("identityProviders")]

        [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]   
        public ICollection<T> IdentityProviders { get; set; }

        private IDictionary<string, object> _additionalProperties;

        [JsonExtensionData]
        public IDictionary<string, object> AdditionalProperties
        {
            get { return _additionalProperties ?? (_additionalProperties = new Dictionary<string, object>()); }
            set { _additionalProperties = value; }
        }
    }
  1. Change the method signature:
Task<IdentityProviderResponse<T>> RetrieveIdentityProviderWithIdAsync<T>(string identityProviderId, CancellationToken cancellationToken = default) where T : IdentityProvider;
```</issue_description>

## Comments on the Issue (you are @copilot in this section)

<comments>
<comment_new><author>@christianhelle</author><body>
@attilah thanks for taking the time to report this. I'll see what I can do</body></comment_new>
<comment_new><author>@christianhelle</author><body>
@attilah The contract/dto types generated are partial classes. Would it help extending those? I piggy back on NSwag for contract/dto type generation and there is very little I can do to change how things these types are generated</body></comment_new>
</comments>

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 2 commits February 20, 2026 18:08
Co-authored-by: christianhelle <710400+christianhelle@users.noreply.github.com>
Co-authored-by: christianhelle <710400+christianhelle@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix base type generation for oneOf in schema Fix: Base type not generated for types using oneOf with discriminator Feb 20, 2026
Copilot AI requested a review from christianhelle February 20, 2026 18:25
@christianhelle christianhelle added enhancement New feature, bug fix, or request .NET Pull requests that contain changes to .NET code labels Feb 21, 2026
@codecov

codecov Bot commented Mar 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 89.33%. Comparing base (5cc8f38) to head (81ef306).
⚠️ Report is 79 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #906      +/-   ##
==========================================
- Coverage   93.33%   89.33%   -4.01%     
==========================================
  Files          23       26       +3     
  Lines        1396     1500     +104     
==========================================
+ Hits         1303     1340      +37     
- Misses         47       85      +38     
- Partials       46       75      +29     
Flag Coverage Δ
unittests 89.33% <ø> (-4.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@christianhelle
christianhelle marked this pull request as ready for review March 4, 2026 10:46
Copilot AI review requested due to automatic review settings March 4, 2026 10:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a code generation bug where OpenAPI schemas using oneOf/anyOf with a discriminator object were not properly handled by NSwag's C# code generator. Without the fix, NSwag would generate anonymous types (e.g., IdentityProvider2) instead of a proper base class with an inheritance hierarchy. The fix introduces a schema pre-processing step that converts the oneOf/anyOf + discriminator pattern into the allOf inheritance pattern that NSwag understands.

Changes:

  • Pre-processes OpenAPI schemas to convert oneOf/anyOf + discriminator patterns into allOf inheritance patterns before NSwag code generation
  • Clears the oneOf/anyOf entries from base schemas after injecting allOf references into each subtype
  • Adds comprehensive tests for both NJsonSchema and System.Text.Json polymorphic serialization modes

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
src/Refitter.Core/CSharpClientGeneratorFactory.cs Adds ConvertOneOfWithDiscriminatorToAllOf() pre-processing method that rewrites oneOf/anyOf + discriminator schemas into NSwag-compatible allOf inheritance
src/Refitter.Tests/Examples/OneOfDiscriminatorTests.cs New test class with 9 test cases covering base type generation, inheritance hierarchy, subtype generation, correct property types, and both serialization modes

You can also share your feedback on Copilot code review. Take the survey.

type: string
";

[Test]

Copilot AI Mar 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ConvertOneOfWithDiscriminatorToAllOf method handles anyOf + discriminator (line 84 concatenates schema.AnyOf), but there is no test case for the anyOf with discriminator pattern. Given the test suite has comprehensive tests for oneOf + discriminator, the analogous anyOf path in the implementation is untested. If NSwag handles anyOf differently from oneOf during code generation, this path could silently produce incorrect output.

Copilot uses AI. Check for mistakes.
@christianhelle

Copy link
Copy Markdown
Owner

@copilot apply changes based on the comments in this thread

Co-authored-by: christianhelle <710400+christianhelle@users.noreply.github.com>

Copilot AI commented Mar 4, 2026

Copy link
Copy Markdown
Contributor Author

@copilot apply changes based on the comments in this thread

Added anyOf + discriminator tests in commit 81ef306. The new test cases cover all the same scenarios as the oneOf tests: base type generation, no anonymous types, all subtypes generated, inheritance hierarchy, correct property types, compilable output, and both NJsonSchema and System.Text.Json polymorphic serialization modes.

@sonarqubecloud

sonarqubecloud Bot commented Mar 4, 2026

Copy link
Copy Markdown

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.


You can also share your feedback on Copilot code review. Take the survey.

public async Task Generates_Base_Type_For_OneOf_With_Discriminator()
{
string generatedCode = await GenerateCode();
generatedCode.Should().Contain("class IdentityProvider");

Copilot AI Mar 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The assertion generatedCode.Should().Contain("class IdentityProvider") at line 126 is a weak test because it can match class IdentityProviderResponse (which is always generated regardless of the fix). If only IdentityProviderResponse were present and IdentityProvider were missing, this test would still pass. A more precise assertion would use "class IdentityProvider\r", "class IdentityProvider\n", or a pattern that does not match the Response suffix, such as "\npartial class IdentityProvider" or a whitespace-terminated check. The same issue applies to line 207 ("class Notification") which could match the class NotificationResponse.

Suggested change
generatedCode.Should().Contain("class IdentityProvider");
generatedCode.Should().Contain("class IdentityProvider ");

Copilot uses AI. Check for mistakes.
public async Task Generates_Base_Type_For_AnyOf_With_Discriminator()
{
string generatedCode = await GenerateCode(spec: AnyOfOpenApiSpec);
generatedCode.Should().Contain("class Notification");

Copilot AI Mar 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The assertion generatedCode.Should().Contain("class Notification") at line 207 is a weak test because it will also match class NotificationResponse (which is always generated). A more precise assertion should distinguish the base type Notification from the response wrapper, e.g. checking for "class Notification\n" or a partial class declaration pattern.

Suggested change
generatedCode.Should().Contain("class Notification");
generatedCode.Should().Contain("class Notification\n");

Copilot uses AI. Check for mistakes.
Comment on lines +270 to +282
private static async Task<string> GenerateCode(string spec = OpenApiSpec, bool usePolymorphicSerialization = false)
{
var swaggerFile = await SwaggerFileHelper.CreateSwaggerFile(spec);
var settings = new RefitGeneratorSettings
{
OpenApiPath = swaggerFile,
UsePolymorphicSerialization = usePolymorphicSerialization,
};

var sut = await RefitGenerator.CreateAsync(settings);
var generatedCode = sut.Generate();
return generatedCode;
}

Copilot AI Mar 4, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no test coverage for the combination of TrimUnusedSchema = true with oneOf/anyOf + discriminator. The SchemaCleaner runs before ConvertOneOfWithDiscriminatorToAllOf() (in RefitGenerator.CreateAsync vs CSharpClientGeneratorFactory.Create()), which means subtypes are preserved by the cleaner (since it enumerates OneOf/AnyOf entries unconditionally), and the transformation runs afterwards. However, this interaction is not tested. Adding a test with TrimUnusedSchema = true would improve confidence that these two features compose correctly.

Copilot uses AI. Check for mistakes.
@christianhelle
christianhelle merged commit 8cd0da8 into main Mar 4, 2026
16 of 17 checks passed
@christianhelle
christianhelle deleted the copilot/fix-oneof-schema-generation branch March 4, 2026 13:52
hwinther pushed a commit to hwinther/test that referenced this pull request May 6, 2026
Updated [refitter](https://github.com/christianhelle/refitter) from
1.7.1 to 2.0.0.

<details>
<summary>Release notes</summary>

_Sourced from [refitter's
releases](https://github.com/christianhelle/refitter/releases)._

## 2.0.0

## What's Changed

* Fix numeric format with pattern quirk - infer type from format for all
numeric types by @​Copilot in
christianhelle/refitter#869
* Read group documentation from document tags. by @​DJ4ddi in
christianhelle/refitter#887
* Fix null reference and XML escaping in XmlDocumentationGenerator by
@​Copilot in christianhelle/refitter#890
* Fix build workflow: add dotnet restore before dotnet msbuild in
Prepare step by @​Copilot in
christianhelle/refitter#892
christianhelle/refitter#895
* Fix MSBuild workflow by @​christianhelle in
christianhelle/refitter#898
* Add support for generating a single client from multiple OpenAPI
specifications by @​Copilot in
christianhelle/refitter#904
* Migrate from Microsoft.OpenApi.Readers 1.x to Microsoft.OpenApi 3.x by
@​vgmello in christianhelle/refitter#907
* Improve Smoke Tests execution time by @​christianhelle in
christianhelle/refitter#915
* Fix #​580: Nullable strings marked correctly by @​christianhelle in
christianhelle/refitter#921
* Fix #​672: MultipleInterfaces ByTag method naming scoped per-interface
by @​christianhelle in
christianhelle/refitter#922
* Fix #​635: Refactor source generator to use context.AddSource() by
@​christianhelle in christianhelle/refitter#923
* Add custom format mappings configuration by @​christianhelle in
christianhelle/refitter#927
* Fix multipart form-data parameter extraction by @​christianhelle in
christianhelle/refitter#928
christianhelle/refitter#911
christianhelle/refitter#902
* Fix smoke tests: --interface-only variant missing using directive for
contract types by @​Copilot in
christianhelle/refitter#933
* Fix SonarCloud Code Quality Issues by @​Copilot in
christianhelle/refitter#932
* Add debug logging for source generator when searching for .refitter
files by @​codymullins in
christianhelle/refitter#743
* Fix: Base type not generated for types using oneOf with discriminator
by @​Copilot in christianhelle/refitter#906
* Add option for Method Level Authorization header attribute by
@​Roflincopter in christianhelle/refitter#897
* Fix PR #​897 review feedback and add comprehensive bearer auth tests
by @​christianhelle in
christianhelle/refitter#936
* Fix numeric suffix added to interface method names in ByTag mode by
@​Copilot in christianhelle/refitter#914
* Improve OpenAPI parse + codegen throughput by removing avoidable
allocations and repeated regex work by @​Copilot in
christianhelle/refitter#937
* Move [JsonConverter] from enum properties to enum types by
@​christianhelle in christianhelle/refitter#938
* Fix broken CLI tool help text by @​christianhelle in
christianhelle/refitter#940
* Improve code coverage to >90% by @​christianhelle in
christianhelle/refitter#941
* Microsoft.OpenApi v3.4 by @​christianhelle in
christianhelle/refitter#945
* Add Unicode support for XML doc comment generation by @​christianhelle
in christianhelle/refitter#948
* Add PropertyNamingPolicy support for JSON property naming by
@​christianhelle in christianhelle/refitter#969
christianhelle/refitter#966
* Fix recursive schema stack overflows by @​christianhelle in
christianhelle/refitter#971
* Made Header Parameters for Security Schemes safe to use as C# variable
name by @​smoerijf in
christianhelle/refitter#977
* Enhance schema alias handling and property name generation by
@​christianhelle in christianhelle/refitter#996
* Verify alias handling and sanitize PascalCase properties by
@​christianhelle in christianhelle/refitter#997
* Harden .refitter settings deserialization and output path handling by
@​christianhelle in christianhelle/refitter#1000
* Special-case the default .refitter filename before deriving
OutputFilename by @​coderabbitai[bot] in
christianhelle/refitter#1002
* [v2.0 audit] Fix pre-release regressions from #​1057 by
@​christianhelle in christianhelle/refitter#1064
* Resolve high-severity audit findings from #​1057 by @​christianhelle
in christianhelle/refitter#1067
* [v2.0 audit] Close remaining verified #​1057 regressions by
@​christianhelle in christianhelle/refitter#1070
* Harden generation flows by @​christianhelle in
christianhelle/refitter#1071
* Breaking changes and Migration Guide for v2.0.0 by @​christianhelle in
christianhelle/refitter#1009
* Handle equivalent duplicate schemas in multi-spec merge by
@​christianhelle in christianhelle/refitter#1076
* Tighten warning handling across Refitter builds by @​christianhelle in
christianhelle/refitter#1079
* Fix default solution path and update .NET version in VS Code config by
@​christianhelle in christianhelle/refitter#1082
* Fix docker smoke tests by @​christianhelle in
christianhelle/refitter#1081
* Sanitize malformed schema type names without renaming clean schemas by
@​christianhelle in christianhelle/refitter#1085

 ... (truncated)

## 1.7.3

## What's Changed
* Add support for systems running only .NET 10.0 (without .NET 8.0 or
9.0) in Refitter.MSBuild by @​christianhelle in
christianhelle/refitter#882
* Update to return HttpResponseMessage for file downloads by @​frogcrush
in christianhelle/refitter#877

## New Contributors
* @​frogcrush made their first contribution in
christianhelle/refitter#877

**Full Changelog**:
christianhelle/refitter@1.7.2...1.7.3

## 1.7.2

**Implemented enhancements:**

- Improve Immutable Records ergonomics
[\#​844](christianhelle/refitter#844)
- Omit certain operation headers and include all others
[\#​840](christianhelle/refitter#840)
- Create .refitter settings file as part of output
[\#​859](christianhelle/refitter#859) by
@[christianhelle
- Fix integerType enum deserialization issue
[\#​855](christianhelle/refitter#855)
([christianhelle](https://github.com/christianhelle))
- support custom nswag template directory \#​844
[\#​854](christianhelle/refitter#854) by
@​kmc059000
- Fix missing method parameter XML code-documentation
[\#​850](christianhelle/refitter#850)
([christianhelle](https://github.com/christianhelle))

**Fixed bugs:**

- integerType parsing in settings file fails
[\#​851](christianhelle/refitter#851)
- CS1573 : Method parameter has no matching XML comment
[\#​846](christianhelle/refitter#846)

**Merged pull requests:**

- docs: add frogcrush as a contributor for code
[\#​878](christianhelle/refitter#878)
([allcontributors[bot]](https://github.com/apps/allcontributors))
- Migrate solution files from .sln to .slnx format
[\#​876](christianhelle/refitter#876)
([Copilot](https://github.com/apps/copilot-swe-agent))
- Fix issue with randomly failing tests to due parallel execution
[\#​872](christianhelle/refitter#872)
([christianhelle](https://github.com/christianhelle))
- chore\(deps\): update dependency tunit to 1.9.2
[\#​863](christianhelle/refitter#863)
([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency tunit to 1.7.7
[\#​862](christianhelle/refitter#862)
([renovate[bot]](https://github.com/apps/renovate))
- Add unit tests for WriteRefitterSettingsFile functionality
[\#​860](christianhelle/refitter#860)
([Copilot](https://github.com/apps/copilot-swe-agent))
- chore\(deps\): update dependency ruby to v4
[\#​858](christianhelle/refitter#858)
([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency tunit to 1.6.28
[\#​857](christianhelle/refitter#857)
([renovate[bot]](https://github.com/apps/renovate))
- docs: add 0x2badc0de as a contributor for bug
[\#​856](christianhelle/refitter#856)
([allcontributors[bot]](https://github.com/apps/allcontributors))
- chore\(deps\): update dependency swashbuckle.aspnetcore to 10.1.0
[\#​853](christianhelle/refitter#853)
([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency tunit to 1.6.0
[\#​852](christianhelle/refitter#852)
([renovate[bot]](https://github.com/apps/renovate))
- docs: add lilinus as a contributor for code
[\#​849](christianhelle/refitter#849)
([allcontributors[bot]](https://github.com/apps/allcontributors))
- chore\(deps\): update dependency ruby to v3.4.8
[\#​845](christianhelle/refitter#845)
([renovate[bot]](https://github.com/apps/renovate))
- chore\(deps\): update dependency tunit to 1.5.70
[\#​837](christianhelle/refitter#837)
([renovate[bot]](https://github.com/apps/renovate))


**Full Changelog**:
christianhelle/refitter@1.7.1...1.7.2

Commits viewable in [compare
view](christianhelle/refitter@1.7.1...2.0.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=refitter&package-manager=nuget&previous-version=1.7.1&new-version=2.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
vgmello pushed a commit to vgmello/momentum that referenced this pull request May 10, 2026
Updated [Refitter.MSBuild](https://github.com/christianhelle/refitter)
from 1.7.3 to 2.0.0.

<details>
<summary>Release notes</summary>

_Sourced from [Refitter.MSBuild's
releases](https://github.com/christianhelle/refitter/releases)._

## 2.0.0

## What's Changed

* Fix numeric format with pattern quirk - infer type from format for all
numeric types by @​Copilot in
christianhelle/refitter#869
* Read group documentation from document tags. by @​DJ4ddi in
christianhelle/refitter#887
* Fix null reference and XML escaping in XmlDocumentationGenerator by
@​Copilot in christianhelle/refitter#890
* Fix build workflow: add dotnet restore before dotnet msbuild in
Prepare step by @​Copilot in
christianhelle/refitter#892
christianhelle/refitter#895
* Fix MSBuild workflow by @​christianhelle in
christianhelle/refitter#898
* Add support for generating a single client from multiple OpenAPI
specifications by @​Copilot in
christianhelle/refitter#904
* Migrate from Microsoft.OpenApi.Readers 1.x to Microsoft.OpenApi 3.x by
@​vgmello in christianhelle/refitter#907
* Improve Smoke Tests execution time by @​christianhelle in
christianhelle/refitter#915
* Fix #​580: Nullable strings marked correctly by @​christianhelle in
christianhelle/refitter#921
* Fix #​672: MultipleInterfaces ByTag method naming scoped per-interface
by @​christianhelle in
christianhelle/refitter#922
* Fix #​635: Refactor source generator to use context.AddSource() by
@​christianhelle in christianhelle/refitter#923
* Add custom format mappings configuration by @​christianhelle in
christianhelle/refitter#927
* Fix multipart form-data parameter extraction by @​christianhelle in
christianhelle/refitter#928
christianhelle/refitter#911
christianhelle/refitter#902
* Fix smoke tests: --interface-only variant missing using directive for
contract types by @​Copilot in
christianhelle/refitter#933
* Fix SonarCloud Code Quality Issues by @​Copilot in
christianhelle/refitter#932
* Add debug logging for source generator when searching for .refitter
files by @​codymullins in
christianhelle/refitter#743
* Fix: Base type not generated for types using oneOf with discriminator
by @​Copilot in christianhelle/refitter#906
* Add option for Method Level Authorization header attribute by
@​Roflincopter in christianhelle/refitter#897
* Fix PR #​897 review feedback and add comprehensive bearer auth tests
by @​christianhelle in
christianhelle/refitter#936
* Fix numeric suffix added to interface method names in ByTag mode by
@​Copilot in christianhelle/refitter#914
* Improve OpenAPI parse + codegen throughput by removing avoidable
allocations and repeated regex work by @​Copilot in
christianhelle/refitter#937
* Move [JsonConverter] from enum properties to enum types by
@​christianhelle in christianhelle/refitter#938
* Fix broken CLI tool help text by @​christianhelle in
christianhelle/refitter#940
* Improve code coverage to >90% by @​christianhelle in
christianhelle/refitter#941
* Microsoft.OpenApi v3.4 by @​christianhelle in
christianhelle/refitter#945
* Add Unicode support for XML doc comment generation by @​christianhelle
in christianhelle/refitter#948
* Add PropertyNamingPolicy support for JSON property naming by
@​christianhelle in christianhelle/refitter#969
christianhelle/refitter#966
* Fix recursive schema stack overflows by @​christianhelle in
christianhelle/refitter#971
* Made Header Parameters for Security Schemes safe to use as C# variable
name by @​smoerijf in
christianhelle/refitter#977
* Enhance schema alias handling and property name generation by
@​christianhelle in christianhelle/refitter#996
* Verify alias handling and sanitize PascalCase properties by
@​christianhelle in christianhelle/refitter#997
* Harden .refitter settings deserialization and output path handling by
@​christianhelle in christianhelle/refitter#1000
* Special-case the default .refitter filename before deriving
OutputFilename by @​coderabbitai[bot] in
christianhelle/refitter#1002
* [v2.0 audit] Fix pre-release regressions from #​1057 by
@​christianhelle in christianhelle/refitter#1064
* Resolve high-severity audit findings from #​1057 by @​christianhelle
in christianhelle/refitter#1067
* [v2.0 audit] Close remaining verified #​1057 regressions by
@​christianhelle in christianhelle/refitter#1070
* Harden generation flows by @​christianhelle in
christianhelle/refitter#1071
* Breaking changes and Migration Guide for v2.0.0 by @​christianhelle in
christianhelle/refitter#1009
* Handle equivalent duplicate schemas in multi-spec merge by
@​christianhelle in christianhelle/refitter#1076
* Tighten warning handling across Refitter builds by @​christianhelle in
christianhelle/refitter#1079
* Fix default solution path and update .NET version in VS Code config by
@​christianhelle in christianhelle/refitter#1082
* Fix docker smoke tests by @​christianhelle in
christianhelle/refitter#1081
* Sanitize malformed schema type names without renaming clean schemas by
@​christianhelle in christianhelle/refitter#1085

 ... (truncated)

Commits viewable in [compare
view](christianhelle/refitter@1.7.3...2.0.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Refitter.MSBuild&package-manager=nuget&previous-version=1.7.3&new-version=2.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature, bug fix, or request .NET Pull requests that contain changes to .NET code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Base type not generated for types specified by oneOf in the schema

3 participants